namespace MsForgeReboot.Framework.Interfaces {
    using System.Collections.Generic;
    using System.Linq;

    using MsForgeReboot.Framework.Entities;

    using PagedList;

    public interface IBlogService
    {
        /// <summary>
        /// Gets the paged list of blog posts.
        /// </summary>
        /// <returns></returns>
        IPagedList<BlogPost> GetList(int pageNumber, int pageSize);

        /// <summary>
        /// Saves the instance of <see cref="BlogPost" /> to the repository.
        /// </summary>
        /// <param name="blogPost">The blog post.</param>
        void Save(BlogPost blogPost);

        /// <summary>
        /// Saves the comment.
        /// </summary>
        /// <param name="comment">The comment.</param>
        void SaveComment(Comment comment);

        /// <summary>
        /// Gets the by title.
        /// </summary>
        /// <param name="urlTitle">The URL title.</param>
        /// <returns></returns>
        BlogPost GetByUrlPointer(string urlPointer);

        /// <summary>
        /// Deletes the specified id.
        /// </summary>
        /// <param name="id">The id.</param>
        void Delete(string urlPointer);
       
        /// <summary>
        /// Gets the tag.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        Tag GetTag(string tag);

        /// <summary>
        /// Gets the tag with blog posts.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <param name="pageNumber">The page number.</param>
        /// <param name="pageSize">Size of the page.</param>
        /// <returns></returns>
        Tag GetTagWithBlogPosts(string tagName, int pageNumber, int pageSize);

        /// <summary>
        /// Gets the list by tag.
        /// </summary>
        /// <param name="tagName">Name of the tag.</param>
        /// <param name="page">The page.</param>
        /// <param name="pageSize">Size of the page.</param>
        /// <returns></returns>
        IPagedList<BlogPost> GetListByTag(string tagName, int page, int pageSize);
    }
}